﻿using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

namespace ParallelDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> items = new List<string> { "Apple", "Banana", "Cherry" };
            Parallel.ForEach(items, item =>
            {
                // 对每个item执行的操作
                Console.WriteLine(item);
            });

            Parallel.Invoke(
                () => Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId}:Task 1"),
                () => Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId}:Task 2"),
                () => Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId}:Task 3")
            );

            //Task<int> result = Parallel.Run(async () =>
            //{
            //    await Task.Delay(1000); // 模拟异步操作  
            //    return 42; // 返回结果  
            //});
            //// 使用result.Result获取结果或等待任务完成  
            //int resultValue = result.Result; // 阻塞当前线程直到结果可用

            //int maxAttempts = 3; // 最大尝试次数  
            //int delayMilliseconds = 1000; // 重试间隔（毫秒）  
            //bool success = Parallel.Retry(maxAttempts, delayMilliseconds, () =>
            //{
            //    // 需要重试的代码或操作  
            //    return true; // 返回操作是否成功的结果  
            //});

            int[] numbers = new int[] { 1, 2, 3, 4, 5 };
            Parallel.For(0, numbers.Length, i =>
            {
                // 对每个元素执行的操作，可以使用索引i  
                Console.WriteLine($"{i}: {numbers[i]}");
            });

        }
    }
}
